package com.tedu;

import javafx.scene.shape.Shape3D;
import org.junit.Test;

/**
 * Java万物皆对象-->真的是面向对象吗-->不全是【八大基本数据类型】
 * 对象【类--创建对象，调用属性，方法】
 * 8个基础数据类型---本质类型---类---包装类【对象，通过点调用方法，属性】
 * 包装类不可以修改：final修饰类，无法继承
 * 8个包装类的方法基本通用
 * int          Integer       java.lang   继承Number
 * long         Long          java.lang   继承Number
 * double       Double        java.lang   继承Number
 * short        Short         java.lang   继承Number
 * float        Float         java.lang   继承Number
 * byte         Byte          java.lang   继承Number
 * char         Char          java.lang   继承Object
 * boolean      Boolean       java.lang   继承Object
 */
public class Packing {
    @Test
    public void test(){
        int i=1;  //不是面向对象
        Integer a=new Integer(1);//面向对象
        a.toString();
    }
    /**
     * 包装类API
     * 抽象类 Number 父类：Integer,Lang,Double,Short,Float,Byte
     * xxxValue抽象方法：把基本数据类型转换成包装类的方法
     * intValue方法   返回int变量
     * longValue方法  返回long变量
     * doubleValue方法 返回double变量
     * shortValue方法  返回short变量
     * floatValue方法  返回float变量
     * byteValue方法   返回byte变量
     * 需求：把以上的6个数据类型转换成包装类，输出基本数据类型
     */
    @Test
    public void testValue(){
        //int打包---包装类---取出---从包装类获取基础数据类型
        Integer i=new Integer("123");
        int is=i.intValue();//包装类 类型转换为int返回
        Integer t=new Integer("123");
        int si=t.intValue();
        System.out.println("Integer包装类"+(is==si));
        System.out.println("Integer包装类"+i.equals(t));
        //.equals 对比对象 确定对象是否有值[包装类] 有实际值 对比
        //其他五个基础数据类型包装类--打包拆包
        Long l=new Long("222");
        long l1=l.longValue();
        System.out.println("Long包装类"+l1);

        Double d=new Double("345");
        double d1=d.doubleValue();
        System.out.println("Double包装类"+d1);

        Short s=new Short("666");
        short s1=s.shortValue();
        System.out.println("Short包装类"+s1);

        Float f=new Float("987");
        float f1=f.intValue();
        System.out.println("Float包装类"+f1);

        Byte b=new Byte("123");
        byte b1=b.byteValue();
        System.out.println("byte包装类"+b1);



        /**
         * public class Persan{
         *    Integer id;
         *    Double money;
         * }
         * id.intValue();
         * money.intValue();     x
         */
    }
        /**
         * xxxValue 抽象方法---------6个
         *                           包装类.ValueOf("对应类型")
         *                            静态方法【打包 拆包】
         * 打包：对应包装类中存对应的类型
         * 拆包；对应包装类，类型，取出
         */
    @Test
    public void testValueOf(){
        int i=Integer.valueOf("123");//类名点出来；静态方法【Number抽象】
        double d=Double.valueOf("123,123");
        boolean b=Boolean.valueOf("true");
        Character.valueOf('i');
    }

    /**
     * parseXXX     静态方法【重点】
     * 作用：将字符串转换为对应的类型：
     * 参数--字符串--给字符串转换为对应数据类型
     * 注意；字符串随便写，不可以随便解析成对应类型
     */
    @Test
    public void testParseXXX(){
    //1.把基本数据类型转换为字符串方法
  //  String s=String.valueOf("2");
    //2.把字符串转换为基础数据类型方法  需要解析出来
    //String s2="2x";
    //int i=Integer.parseInt(s2+"打桩");
    //NumberFormatException 数值格式异常：解析对应类型出错
    //需求 把s3-s6 正确解析出来
String s3="123.123";
 Float f=Float.parseFloat(s3);
String s4="true";
 boolean b=Boolean.parseBoolean(s4);
String s5="10L";//无法加L表示long！符合三种类型 Integer
//long l=Long.parseLong(s5);
String s6="a"; //Character 字符类型包装类：无法解析
//byte byt=Byte.parseByte(s6);
//    System.out.println(byt);
    //总结1，字符类 无法正确的解析成对应的类型，不存在char字符
    //    2.字面量L/F，认为这是一个字符串，解析失败
  }
/**
 * 包装类 自动拆装箱
 * JDK1.5  新特性 2004
 * JDK1.5之前没有自动拆装箱
 */
@Test
    public void testO1(){
         //JDK1.5
       Integer in=Integer.valueOf("1");//输入类型转换为Integer
       int i=in.intValue();//把包装好的类型，基础数据类型取出
    //JDK1.5 之后 定义方法编译器认可，并非JVM虚拟机认可！
    Integer it=1; //装箱
    int is=it;    //拆箱
    //自动拆装箱实际上，把拆箱与装箱的步骤交给idea执行
}

}
